<?php
/**
 * @authors liuqinglin 
 * @email (2961181429@qq.com) 
 * @(https://my.oschina.net/shp32131)
 * @date    2016-12-01 11:48:25
 */
class Model{
		//CodeIgniter 框架中 application/config/database文件
		private $db_config_file;
		//创建系统中所用的数据库、数据表的sql语句文件
		private $sql_file;
		//提示信息
		private $info;

		//==========================================
		// 功能: 初使化对象的成员属性
		// 参数: $db_config_file是指定需要修改的配置文件，sql_file是需要安装数据表的SQL语句文件 
		//==========================================	
		function __construct($db_config_file,$sql_file)
		{
			$this->db_config_file = $db_config_file;
			$this->sql_file = $sql_file;
			$this->info = " ";
		}

		//==========================================
		// 函数: update_config_file($post)
		// 功能: 修改指定配置文件中的内容
		//==========================================	
		function update_config_file($post)
		{
			//$this->db_config_file => CodeIgniter 框架中 application/config/database文件
			$config_file = file_get_contents($this->db_config_file);
			//index.php中的数据库配置
			$config = file_get_contents('index.php');

			foreach($post as $key => $val)
			{
				$pattern[]="/\'".$key."\'\s*=>\s*\'.*\',/";
				$replace_content[]="'".$key."'".' => '."'".$val."',";
			}

			$config_file = preg_replace($pattern, $replace_content,$config_file);

			$config = preg_replace($pattern, $replace_content,$config);

			file_put_contents('index.php', $config);

			return file_put_contents($this->db_config_file, $config_file);
		}

		//==========================================
		// 函数: create_database($user)
		// 功能: 创建系统所需要的数据表，添加管理员用户
		// 参数: $user是在安装界面中设置的管理员用户信息
		//==========================================			
		function create_database($user,$db)
		{
			//连接数据库
			$mysql=mysql_connect($db['hostname'],$db['username'],$db['password']);
			if(!$mysql)
			{
				$this->info.='<font color="red">连接失败，原因：'.mysql_error().'</font>';
				return false;
			}
			//设置字符编码选择数据库名
			// if(！mysql_query('set names utf8')) echo "设置字符编码格式出错！";
			if(mysql_select_db($db['database']))
			{
				$this->info.='数据库<b>'.$db['database'].'</b>选择成功<br>';
			}
			else
			{
				$this->info.='<font color="red">选择数据库<b>'.$db['database'].'</b>失败！<font>';
				return false;
			}
			//获取创建数据库的sql语句
			$sqls='';
			$fp=fopen($this->sql_file, "r");
			while(!feof($fp))
			{
				$line=trim(fgets($fp));
				if($line!="")
				{
					$sqls .= $line{0} == '#' || $line{0}.$line{1} == '--' ? '' : $line;
				}
			}
			fclose($fp);

			//修改表前缀，默认的是xy_，修改成$db['dbprefix']设置的表前缀
			$sqls=rtrim(str_replace('xy_', ' '.$db['dbprefix'], $sqls), ";");

			$ret=explode(";", $sqls);

			//创建数据表
			foreach($ret as $query)
			{
			
				if(substr($query, 0, 12) == 'CREATE TABLE')
				{
					$name = preg_replace("/CREATE TABLE ([a-z0-9_]+) .*/is", "\\1", $query);
					if(mysql_query($query))
					{

						$this->info.='创建数据表'.' <b>'.$name.'</b> ... '.'成功！！<br>';

					}
					else
					{
						$this->info.='<font color="red">创建数据表'.' '.$name.' ... '.'失败！</font><br>'.mysql_error();						
					    mysql_close();
						return false;
					}	
				}
				else
				{
					if(!mysql_query($query))
					{
						$this->info.='<font color="red">查询语句'.$query.'执行失败！<br>'.mysql_error().'</font>';							
						mysql_close();
						return false;
					}
				}
			}

			//添加管理员用户
			$insert = "INSERT INTO ".$db['dbprefix'].'admin(id,root,name,password,email,phone,add_time)';
			$insert .= "VALUES(null,1,'".$user['name']."','".md5($user['password'])."','".$user['email']."','".$user['phone']."',".time().")";

			if(mysql_query($insert))
			{
				$this->info.='添加管理员用户<b>'.$user["name"].'</b>成功！<br>';
			}
			else
			{
				$this->info.='<font color="red">添加管理员用户<b>'.$user["name"].'</b>失败！<font>'.mysql_error();
				mysql_close();
				return false;
			}
			
			mysql_close();
			return true;		
		}

		//==========================================
		// 函数: get_install_info()
		// 功能: 用于安装过程中的提示信息
		// 返回: 返回安装过程中的提示信息字符串
		//==========================================		
		function get_install_info()
		{
			return $this->info;
		}
}
?>